home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / edsspell / tstmain.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-09-15  |  6.2 KB  |  247 lines

  1. { This demo shows how to use the TOpenDialog,
  2.   TSaveDialog, TFindDialog and TReplaceDialog
  3.   components along with the LoadFromFile and
  4.   SaveToFile methods of a TStringList (in this
  5.   case the string list in Memo1). }
  6.  
  7. { and now... how to spell check that memo}
  8.  
  9. unit TstMain;
  10.  
  11. interface
  12.  
  13. uses WinTypes, WinProcs, Classes, Graphics, Controls, Menus,
  14.   Forms, StdCtrls, Dialogs, ExtCtrls, MemoUtil, EDSSpell;
  15.  
  16. type
  17.   TForm1 = class(TForm)
  18.     MainMenu1: TMainMenu;
  19.     File1: TMenuItem;
  20.     Memo1: TMemo;
  21.     OpenDialog1: TOpenDialog;
  22.     SaveDialog1: TSaveDialog;
  23.     FindDialog1: TFindDialog;
  24.     Search1: TMenuItem;
  25.     Find1: TMenuItem;
  26.     Replace1: TMenuItem;
  27.     FindNext1: TMenuItem;
  28.     ReplaceDialog1: TReplaceDialog;
  29.     Actions1: TMenuItem;
  30.     SpellCheck1: TMenuItem;
  31.     Panel1: TPanel;
  32.     CountWords1: TMenuItem;
  33.     SpellDlg1: TSpellDlg;
  34.     procedure New1Click(Sender: TObject);
  35.     procedure FileOpenClick(Sender: TObject);
  36.     procedure Save1Click(Sender: TObject);
  37.     procedure SaveAs1Click(Sender: TObject);
  38.     procedure FileExitClick(Sender: TObject);
  39.     procedure Find1Click(Sender: TObject);
  40.     procedure Find(Sender : TObject);
  41.     procedure FindNext1Click(Sender: TObject);
  42.     procedure Replace1Click(Sender: TObject);
  43.     procedure Replace(Sender: TObject);
  44.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  45.     procedure SpellCheck1Click(Sender: TObject);
  46.     procedure UpdateXY;
  47.     procedure Memo1Change(Sender: TObject);
  48.     procedure Memo1Click(Sender: TObject);
  49.     procedure Memo1KeyUp(Sender: TObject; var Key: Word;
  50.       Shift: TShiftState);
  51.     procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  52.       Shift: TShiftState; X, Y: Integer);
  53.     procedure CountWords1Click(Sender: TObject);
  54.   end;
  55.  
  56. var
  57.   Form1: TForm1;
  58.  
  59. implementation
  60.  
  61. uses SysUtils, Search;
  62.  
  63. {$R *.DFM}
  64.  
  65. procedure TForm1.New1Click(Sender: TObject);
  66. begin
  67.   Memo1.Clear;
  68.   OpenDialog1.Filename := '';
  69.   Caption := 'Text Demo - [Untitled]';
  70. end;
  71.  
  72. procedure TForm1.FileOpenClick(Sender: TObject);
  73. var
  74.   Buffer:     pChar;
  75.   BufferSize: Longint;
  76.   f:          file;
  77. begin
  78.   with OpenDialog1 do
  79.     if Execute then
  80.     begin
  81.       Memo1.Lines.LoadFromFile(FileName);
  82.       try
  83.         BufferSize := Memo1.GetTextLen + 1;
  84.         GetMem (Buffer, BufferSize);
  85.         if Memo1.GetTextBuf (Buffer, BufferSize)<>BufferSize-1 then
  86.           MessageDlg ('Error Allocating Buffer...', mtError, [mbOk], 0);
  87.         OemToAnsiBuff (Buffer, Buffer, BufferSize);
  88.         Memo1.SetTextBuf (Buffer);
  89.       finally
  90.         FreeMem (Buffer, BufferSize);
  91.       end;  { try }
  92.       Caption := 'Text Demo - ' + ExtractFilename(FileName);
  93.     end;
  94. end;
  95.  
  96. procedure TForm1.Save1Click(Sender: TObject);
  97. var
  98.   Buffer:     PChar;
  99.   BufferSize: Longint;
  100. begin
  101.   if OpenDialog1.Filename <> '' then
  102.   begin
  103.     try
  104.       BufferSize := Memo1.GetTextLen + 1;
  105.       GetMem (Buffer, BufferSize);
  106.       if Memo1.GetTextBuf (Buffer, BufferSize)<>BufferSize-1 then
  107.         MessageDlg ('Error Allocating Buffer...', mtError, [mbOk], 0);
  108.  
  109.       AnsiToOemBuff (Buffer, Buffer, BufferSize);
  110.       Memo1.SetTextBuf (Buffer);
  111.       Memo1.Lines.SaveToFile(OpenDialog1.Filename);
  112.       Memo1.Modified := False;
  113.       OemToAnsiBuff (Buffer, Buffer, BufferSize);
  114.       Memo1.SetTextBuf (Buffer);
  115.     finally
  116.       FreeMem (Buffer, BufferSize);
  117.     end;  { try }
  118.   end
  119.     else SaveAs1Click(Sender);
  120. end;
  121.  
  122. procedure TForm1.SaveAs1Click(Sender: TObject);
  123. begin
  124.   with SaveDialog1 do
  125.     if Execute then
  126.     begin
  127.       Memo1.Lines.SaveToFile(Filename);
  128.       Caption := 'Text Demo - ' + ExtractFilename(FileName);
  129.       OpenDialog1.Filename := Filename;
  130.     end;
  131. end;
  132.  
  133. procedure TForm1.Find1Click(Sender: TObject);
  134. begin
  135.   FindDialog1.Execute;
  136.   FindNext1.Enabled := True;
  137. end;
  138.  
  139. procedure TForm1.Find(Sender: TObject);
  140. begin
  141.   with Sender as TFindDialog do
  142.     if not SearchMemo(Memo1, FindText, Options) then
  143.       ShowMessage('Cannot find "' + FindText + '".');
  144. end;
  145.  
  146. procedure TForm1.Replace1Click(Sender: TObject);
  147. begin
  148.   ReplaceDialog1.Execute;
  149. end;
  150.  
  151. procedure TForm1.FindNext1Click(Sender: TObject);
  152. begin
  153.   Find(FindDialog1);
  154. end;
  155.  
  156. { Replace and ReplaceAll call this routine. }
  157. procedure TForm1.Replace(Sender: TObject);
  158. var
  159.   Found: Boolean;
  160. begin
  161.   with ReplaceDialog1 do
  162.   begin
  163.     if AnsiCompareText(Memo1.SelText, FindText) = 0 then
  164.       Memo1.SelText := ReplaceText;
  165.     Found := SearchMemo(Memo1, FindText, Options);
  166.     while Found and (frReplaceAll in Options) do
  167.     begin
  168.       Memo1.SelText := ReplaceText;
  169.       Found := SearchMemo(Memo1, FindText, Options);
  170.     end;
  171.     if (not Found) and (frReplace in Options) then
  172.       ShowMessage('Cannot find "' + FindText + '".');
  173.   end;
  174. end;
  175.  
  176. procedure TForm1.FileExitClick(Sender: TObject);
  177. begin
  178.   Close;
  179. end;
  180.  
  181. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  182. var
  183.   MsgResult: Word;
  184. begin
  185.   if Memo1.Modified then 
  186.     MsgResult := MessageDlg(Format('File %s has been modified. Save file?',
  187.     [OpenDialog1.Filename]), mtWarning, mbYesNoCancel, 0);
  188.   case MsgResult of
  189.     mrYes:
  190.       begin
  191.         Save1Click(Sender); 
  192.         CanClose := True;
  193.       end;
  194.     mrNo: CanClose := True;
  195.     mrCancel: CanClose := False;
  196.   end;
  197. end;
  198.  
  199. procedure TForm1.UpdateXY;
  200. var
  201.   XY:   TPoint;
  202.   XStr: String[4];
  203.   YStr: String[4];
  204. begin
  205.   {update the status panel on bottom}
  206.   XY := Memo_CursorPos (Memo1);
  207.   Str (XY.X:4, XStr);
  208.   Str (XY.Y:4, YStr);
  209.   Panel1.Caption := XStr + ':' + YStr;
  210. end;  { TForm1.UpdateXY }
  211.  
  212. procedure TForm1.Memo1Change(Sender: TObject);
  213. begin
  214.   UpdateXY;
  215. end;
  216.  
  217. procedure TForm1.Memo1Click(Sender: TObject);
  218. begin
  219.   UpdateXY;
  220. end;
  221.  
  222. procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  223.   Shift: TShiftState);
  224. begin
  225.   UpdateXY;
  226. end;
  227.  
  228. procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  229.   Shift: TShiftState; X, Y: Integer);
  230. begin
  231.   UpdateXY;
  232. end;
  233.  
  234. procedure TForm1.SpellCheck1Click(Sender: TObject);
  235. begin
  236.   SpellDlg1.CheckMemo (Memo1);
  237. end;
  238.  
  239. procedure TForm1.CountWords1Click(Sender: TObject);
  240. var
  241.   W1, U1: longint;
  242. begin
  243.   SpellDlg1.Memo_WordCount (Memo1, W1, U1);
  244. end;
  245.  
  246. end.
  247.